#ifndef QUEUE_H
#define QUEUE_H

#include "utils.h"
#include "heap.h"
#include "unordered.h"
#include "queuestrategy.h"

class PriorityQueue
{
public:
	enum QueueType { heap, unordered };
	
	PriorityQueue(QueueStrategy *s) : s(s) {}
	~PriorityQueue() {}
	
	void insert(Edge newEdge);
	Edge deleteMin();
	void setStrategy(QueueStrategy *s);
	
private:
	QueueStrategy *s;
	
	Heap *binaryHeap;
	UnorderedArray *unorderedArray;
	QueueType type;

public:
	PriorityQueue(QueueType type, int size);

	//void insert(Edge newEdge);

	//Edge deleteMin();
};

#endif
